//
//  GRDiscoverCoverScrollView.h
//  SleepingElf
//
//  Created by karong on 2023/6/13.
//
#import <UIKit/UIKit.h>


NS_ASSUME_NONNULL_BEGIN

typedef enum {
    GRDiscoverCoverScrollViewPageContolAlimentRight,
    GRDiscoverCoverScrollViewPageContolAlimentCenter
} GRDiscoverCoverScrollViewPageContolAliment;

typedef enum {
    GRDiscoverCoverScrollViewPageContolStyleClassic,        // 系統自带经典樣式
    GRDiscoverCoverScrollViewPageContolStyleNone            // 不顯示pagecontrol
} GRDiscoverCoverScrollViewPageContolStyle;

typedef enum : NSUInteger {
    GRBannerCellTypeImage = 0,
    GRBannerCellTypeImageTitle,
} GRBannerCellType;

@class GRDiscoverCoverScrollView;

@protocol GRDiscoverCoverScrollViewDelegate <NSObject>

@optional

/** 點擊圖片回調 */
- (void)cycleScrollView:(GRDiscoverCoverScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index;

/** 圖片滚動回調 */
- (void)cycleScrollView:(GRDiscoverCoverScrollView *)cycleScrollView didScrollToIndex:(NSInteger)index;

@end

@interface GRDiscoverCoverScrollView : UIView
/** 初始輪播圖（推荐使用） */
+ (instancetype)cycleScrollViewWithFrame:(CGRect)frame delegate:(id<GRDiscoverCoverScrollViewDelegate>)delegate placeholderImage:(UIImage *)placeholderImage;

+ (instancetype)cycleScrollViewWithFrame:(CGRect)frame imageURLStringsGroup:(NSArray *)imageURLStringsGroup;


/** 本地圖片輪播初始化方式 */
+ (instancetype)cycleScrollViewWithFrame:(CGRect)frame imageNamesGroup:(NSArray *)imageNamesGroup;

/** 本地圖片輪播初始化方式2,infiniteLoop:是否無限循环 */
+ (instancetype)cycleScrollViewWithFrame:(CGRect)frame shouldInfiniteLoop:(BOOL)infiniteLoop imageNamesGroup:(NSArray *)imageNamesGroup;


//////////////////////  數据源接口  //////////////////////

/** 网络圖片 url string 數组 */
@property (nonatomic, strong) NSArray *imageURLStringsGroup;
@property (nonatomic, strong) NSArray *objectGroup;

/** 每张圖片对应要顯示的文字數组 */
@property (nonatomic, strong) NSArray *titlesGroup;

/** 本地圖片數组 */
@property (nonatomic, strong) NSArray *localizationImageNamesGroup;





//////////////////////  滚動控制接口 //////////////////////

/** 自動滚動間隔時間,默認2s */
@property (nonatomic, assign) CGFloat autoScrollTimeInterval;

/** 是否無限循环,默認Yes */
@property (nonatomic,assign) BOOL infiniteLoop;

/** 是否自動滚動,默認Yes */
@property (nonatomic,assign) BOOL autoScroll;

/** 圖片滚動方向，默認為水平滚動 */
@property (nonatomic, assign) UICollectionViewScrollDirection scrollDirection;

@property (nonatomic, weak) id<GRDiscoverCoverScrollViewDelegate> delegate;

/** block方式監聽點擊 */
@property (nonatomic, copy) void (^clickItemOperationBlock)(NSInteger currentIndex);

/** block方式監聽滚動 */
@property (nonatomic, copy) void (^itemDidScrollOperationBlock)(NSInteger currentIndex);

/** 解決viewWillAppear時出現時輪播圖卡在一半的問題，在控制器viewWillAppear時調用此方法 */
- (void)adjustWhenControllerViewWillAppera;

//////////////////////  自定义樣式接口  //////////////////////


/** 輪播圖片的ContentMode，默認為 UIViewContentModeScaleToFill */
@property (nonatomic, assign) UIViewContentMode bannerImageViewContentMode;

/** 占位圖，用於网络未加載到圖片時 */
@property (nonatomic, strong) UIImage *placeholderImage;

/** 是否顯示分頁控件 */
@property (nonatomic, assign) BOOL showPageControl;

/** 是否在只有一张圖時隐藏pagecontrol，默認為YES */
@property(nonatomic) BOOL hidesForSinglePage;

/** 只展示文字輪播 */
@property (nonatomic, assign) BOOL onlyDisplayText;

/** pagecontrol 樣式，默認為動画樣式 */
@property (nonatomic, assign) GRDiscoverCoverScrollViewPageContolStyle pageControlStyle;

/** 分頁控件位置 */
@property (nonatomic, assign) GRDiscoverCoverScrollViewPageContolAliment pageControlAliment;

/** 分頁控件距离輪播圖的底部間距（在默認間距基础上）的偏移量 */
@property (nonatomic, assign) CGFloat pageControlBottomOffset;

/** 分頁控件距离輪播圖的右邊間距（在默認間距基础上）的偏移量 */
@property (nonatomic, assign) CGFloat pageControlRightOffset;

/** 分頁控件小圆标大小 */
@property (nonatomic, assign) CGSize pageControlDotSize;

/** 当前分頁控件小圆标颜色 */
@property (nonatomic, strong) UIColor *currentPageDotColor;

/** 其他分頁控件小圆标颜色 */
@property (nonatomic, strong) UIColor *pageDotColor;

/** 当前分頁控件小圆标圖片 */
@property (nonatomic, strong) UIImage *currentPageDotImage;

/** 其他分頁控件小圆标圖片 */
@property (nonatomic, strong) UIImage *pageDotImage;

/** 輪播文字label字体颜色 */
@property (nonatomic, strong) UIColor *titleLabelTextColor;

/** 輪播文字label字体大小 */
@property (nonatomic, strong) UIFont  *titleLabelTextFont;

/** 輪播文字label背景颜色 */
@property (nonatomic, strong) UIColor *titleLabelBackgroundColor;

/** 輪播文字label高度 */
@property (nonatomic, assign) CGFloat titleLabelHeight;

@property (assign, nonatomic) BOOL zoomType;

@property (nonatomic, weak) UICollectionView *mainView; // 顯示圖片的collectionView
//cell的size
@property (assign, nonatomic) CGSize itemSize;
//圖片距离cell的左右邊距
@property (assign, nonatomic) CGFloat minimumInteritemSpacing;
////輪播圖cell的類型
@property (nonatomic, assign) GRBannerCellType type;
//////////////////////  清除緩存接口  //////////////////////

/** 清除圖片緩存（此次升級后統一使用SDWebImage管理圖片加載和緩存）  */
+ (void)clearImagesCache;

/** 清除圖片緩存（兼容旧版本方法） */
- (void)clearCache;

- (void)scrollerToTop;
@end

NS_ASSUME_NONNULL_END
